package com.yunkeji.common.enums.app;

import cn.hutool.core.util.StrUtil;

import com.yunkeji.common.exception.AppServiceException;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Optional;

/**
 * 支付类型
 *
 * @author yunkeji
 */
@Getter
@AllArgsConstructor
public enum PayLogTypeEnums {
    // 消费
    消费_提现钻石(103),
    消费_拨打语音(104),
    消费_赠送礼物(105),
    消费_文字聊天消费(107),
    消费_拨打视频(108),
    消费_异常通话结算(109),
    消费_手动扣除用户钱包余额(110),

    // 收益
    收益_接受视频(201),
    收益_接受语音(202),
    收益_接收礼物(203),
    收益_会员签到(204),
    收益_文字聊天收益(205),
    收益_活动奖励(206),
    收益_任务奖励(207),
    收益_邀请视频收益(208),
    收益_邀请充值收益(209),
    收益_充值金币(210),
    收益_充值普通VIP(211),
    收益_提现拒绝退款(212),
    收益_充值专属VIP(213),
    收益_通话预付费返还(214),
    收益_邀请礼物收益(215),
    收益_提现失败退款(216),
    收益_手动添加VIP(217),
    收益_手动添加用户余额(218),
    收益_手动充值(219),
    ;

    private final Integer code;

    public static PayLogTypeEnums getByCode(Integer code) {
        PayLogTypeEnums[] values = PayLogTypeEnums.values();
        Optional<PayLogTypeEnums> first =
                Arrays.stream(values).filter(item -> item.getCode().equals(code)).findFirst();
        if (first.isPresent()) {
            return first.get();
        } else {
            throw AppServiceException.paramException("支付类型参数异常");
        }
    }

    public static String getCountEarnStr() {
        return StrUtil.builder()
                .append(PayLogTypeEnums.收益_接受视频.getCode())
                .append(",")
                .append(PayLogTypeEnums.收益_接收礼物.getCode())
                .append(",")
                .append(PayLogTypeEnums.收益_文字聊天收益.getCode())
                .append(",")
                .append(PayLogTypeEnums.收益_活动奖励.getCode())
                .append(",")
                .append(PayLogTypeEnums.收益_任务奖励.getCode())
                .append(",")
                .append(PayLogTypeEnums.收益_邀请视频收益.getCode())
                .append(",")
                .append(PayLogTypeEnums.收益_邀请充值收益.getCode())
                .append(",")
                .append(PayLogTypeEnums.收益_邀请礼物收益.getCode())
                .toString();
    }

    public static String getCountPayStr() {
        return StrUtil.builder()
                .append(PayLogTypeEnums.收益_通话预付费返还.getCode())
                .append(",")
                .append(PayLogTypeEnums.消费_拨打视频.getCode())
                .append(",")
                .append(PayLogTypeEnums.消费_赠送礼物.getCode())
                .append(",")
                .append(PayLogTypeEnums.消费_文字聊天消费.getCode())
                .toString();
    }
}
